package com.iter.devbox.util;

import java.util.Observable;
import java.util.Observer;

/**
 * MyObserver是观察者类
 * 实现观察者模式非常简单
 * [1]创建被观察者类，它继承自java.util.Observable类；
 * [2]创建观察者类，它实现java.util.Observer接口；
 * [3]对于被观察者类，添加它的观察者；
 * 
 * @author Jimly
 */
public class MyObserver implements Observer {

	/**
	 * o 是被观察这对象
	 * arg 是被观察者对象发出通知时传递出来的数据
	 */
	@Override
	public void update(Observable o, Object arg) {
		System.out.println("收到了更新的通知。。。。。。");
		System.out.println(o);
		System.out.println(arg);
	}
	
	public static void main(String[] args) {
		//观察者类
		MyObserver myObserver = new MyObserver();
		//被观察者类
		MyObservable myObservable = new MyObservable();
		//被观察者类添加观察者
		myObservable.addObserver(myObserver);
		//被观察者类数据发生变化
		myObservable.changeData();
	}
}

/**
 * MyObservable是被观察者类
 * 
 * @author Jimly
 */
class MyObservable extends Observable {

	private int status = 0;
	
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}

	public void changeData () {
		System.out.println("我改变了自己的数据。。。。。。");
		this.status = 100;
		super.setChanged();//这个方法是必须的，必须调用才行
		//notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法，通知它们数据发生了变化
		super.notifyObservers(this.status);
	}
}